<?php

class Determinante
{
    private $mDimensao;
    private $mMatriz;
    private $mValorDeterminante;

    public function __construct($matriz)
    {
        $this->mMatriz = $matriz;
        $this->mDimensao = count($matriz);
        $this->_calcular();
    }
    private function _calcular()
    {
        for ($k=0; $k < $this->mDimensao; $k++)
        {
            for ($i=$k+1; $i < $this->mDimensao; $i++)
            {
                if ($this->mMatriz[$k][$k]==0)
                {   // pivo se anula
                    $maior = abs($this->mMatriz[$k][$k]);
                    for ($cont=$k+1; $cont < $this->mDimensao; $cont++)
                    {
                        if (abs($this->mMatriz[$cont][$k]) > $maior) {
                            $maior = abs($this->mMatriz[$cont][$k]);
                            $indice = $cont;
                        }
                    }
                    $troca = $indice + 1;
                    for ($l=0; $l < $this->mDimensao; $l++) { //troca de linha
                        $aux2=$this->mMatriz[$k][$l];
                        $this->mMatriz[$k][$l]=$this->mMatriz[$indice][$l];
                        $this->mMatriz[$indice][$l]=$aux2;
                    }
                    $det = -$det;
                } // end if
                $M[$i][$k]=-$this->mMatriz[$i][$k]/$this->mMatriz[$k][$k];
                for ($j=0; $j < $this->mDimensao; $j++) {
                    $this->mMatriz[$i][$j]+=$M[$i][$k]*$this->mMatriz[$k][$j];
                }
            }
        }
        $this->mValorDeterminante = 1;
        for ($i=0; $i < $this->mDimensao; $i++) {
                $this->mValorDeterminante = $this->mValorDeterminante * $this->mMatriz[$i][$i];
        }
    }
    public function isZero()
    {
        return ($this->mValorDeterminante == 0);
    }
}

?> 
